home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / SNNSV32.ZIP / SNNSv3.2 / xgui / sources / bn_artmap.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-04-25  |  34.6 KB  |  1,299 lines

  1. /*****************************************************************************
  2.   FILE           : bn_artmap.c
  3.   SHORTNAME      : bn_artmap
  4.   SNNS VERSION   : 3.2
  5.  
  6.   PURPOSE        : Creates the ARTMAP-window and ARTMAP networks. 
  7.   NOTES          :
  8.  
  9.   AUTHOR         : Kai-Uwe Herrmann
  10.   DATE           : 15.1.1993
  11.  
  12.   CHANGED BY     : 
  13.   IDENTIFICATION : @(#)bn_artmap.c    1.9 3/2/94
  14.   SCCS VERSION   : 1.9
  15.   LAST CHANGE    : 3/2/94
  16.  
  17.              Copyright (c) 1990-1994  SNNS Group, IPVR, Univ. Stuttgart, FRG
  18.  
  19. ******************************************************************************/
  20.  
  21.  
  22.  
  23. #include <stdlib.h>
  24. #include <stdio.h>
  25. #include <X11/Xlib.h>
  26. #include <X11/Xutil.h>
  27. #include <X11/Xos.h>
  28. #include <X11/cursorfont.h>
  29. #include <X11/Intrinsic.h>
  30. #include <X11/StringDefs.h>
  31. #include <X11/Shell.h>
  32. #include <X11/Xaw/Box.h>
  33. #include <X11/Xaw/Simple.h>
  34. #include <X11/Xaw/Grip.h>
  35. #include <X11/Xaw/Form.h>
  36. #include <X11/Xaw/SmeBSB.h>
  37. #include <X11/Xaw/SmeLine.h>
  38. #include <X11/Xaw/Viewport.h>
  39. #include <X11/Xaw/Label.h>
  40. #include <X11/Xaw/Toggle.h>
  41. #include <X11/Xaw/Command.h>
  42. #include <X11/Xaw/Cardinals.h>
  43. #include <X11/Xaw/AsciiText.h>
  44. #include <X11/Xaw/Scrollbar.h>
  45.  
  46. #include "ui.h"
  47. #include "glob_typ.h"
  48. #include "kr_ui.h"
  49. #include "ui_mainP.h"
  50. #include "ui_confirmer.h"
  51. #include "ui_textP.h"
  52. #include "ui_utilP.h"
  53. #include "ui_netUpdate.h"
  54. #include "ui_status.h"
  55. #include "ui_xWidgets.h"
  56. #include "ui_fileP.h"
  57. #include "ui_display.h"
  58. #include "ui_event.h"
  59. #include "ui_selection.h"
  60.  
  61. #include "bn_basics.h"
  62.  
  63. #include "bn_artmap.ph"
  64.  
  65.  
  66.  
  67.  
  68. /*****************************************************************************
  69.   FUNCTION : bn_artmap_make_layer
  70.  
  71.   PURPOSE  : make a complete layer
  72.   NOTES    :
  73.  
  74.   UPDATE   : 20.1.1993
  75. ******************************************************************************/
  76.  
  77. static krui_err bn_artmap_make_layer (
  78.                         int  units, 
  79.                         int  rows, 
  80.                         int  cols, 
  81.                         int  Xbegin, 
  82.                         int  Ybegin,
  83.                         char *name_prefix, 
  84.                         int  unit_ttype, 
  85.                         char *actfuncname,
  86.                         char *outfuncname,
  87.                         int  NoOfSites,
  88.                         char **SiteNames,
  89.                         char **SiteFuncNames)
  90.  
  91. {
  92.    krui_err             ret_code = KRERR_NO_ERROR;
  93.  
  94.    int                  row;
  95.    int                  col;
  96.    int                  count;
  97.    int                  last_col;
  98.    int                  unit_no;
  99.    struct PosType       unit_pos;
  100.    char                 *site_name, *site_func_name;
  101.    int                  site_no;
  102.    char                 name[10];
  103.  
  104.  
  105.    /* Create Site Table Entries */
  106.    site_no = 1;
  107.    while (site_no <= NoOfSites) {
  108.       site_name= *(SiteNames+(site_no-1));
  109.       site_func_name= *(SiteFuncNames+(site_no-1));
  110.  
  111.       if ((site_name != NULL) && (site_func_name != NULL)) {
  112.          ret_code = krui_createSiteTableEntry(site_name, site_func_name);
  113.          CHECK_RETURN (ret_code);
  114.       } /*if*/
  115.  
  116.       site_no++;
  117.    }  /*while*/
  118.  
  119.    /* Create Units */
  120.    for (row = 1, count = 0; row <= rows; row++) {
  121.  
  122.       if ((units % rows) > 0) {
  123.          last_col = POS_SIGN((units-count) % (rows-row+1));
  124.       } else {
  125.          last_col = 1;
  126.       } /*if*/
  127.  
  128.       for (col = 1; col <= (cols-1+last_col); col++) {
  129.  
  130.          count++;
  131.  
  132.          unit_no = krui_createDefaultUnit();
  133.          if (unit_no < 0)  CHECK_RETURN (unit_no);
  134.  
  135.          ret_code = krui_setUnitTType (unit_no, unit_ttype);
  136.          CHECK_RETURN( ret_code );
  137.  
  138.          ret_code = krui_setUnitActFunc(unit_no, actfuncname);
  139.          CHECK_RETURN (ret_code);
  140.  
  141.          ret_code = krui_setUnitOutFunc(unit_no, outfuncname);
  142.          CHECK_RETURN (ret_code);
  143.  
  144.          if (units > 1) {
  145.             sprintf (name,"%s%d",name_prefix,count);
  146.          } else {
  147.             sprintf (name,"%s",name_prefix);
  148.          } /*if*/
  149.  
  150.          ret_code = krui_setUnitName (unit_no, name);
  151.          CHECK_RETURN (ret_code);
  152.  
  153.          unit_pos.x = Xbegin + col - 1;
  154.          unit_pos.y = Ybegin + row - 1;
  155.          krui_setUnitPosition( unit_no, &unit_pos );
  156.  
  157.          ret_code = krui_setCurrentUnit (unit_no);
  158.          CHECK_RETURN (ret_code);
  159.  
  160.          /* Add Sites */
  161.          site_no = 1;
  162.          while (site_no <= NoOfSites) {
  163.              site_name= *(SiteNames+(site_no-1));
  164.  
  165.              if (site_name != NULL) {
  166.                 ret_code = krui_addSite (site_name);
  167.                 CHECK_RETURN (ret_code);
  168.              } /*if*/
  169.  
  170.              site_no++;
  171.          } /*while*/
  172.  
  173.       } /*for*/
  174.  
  175.    } /*for*/
  176.  
  177.    return (ret_code);
  178.  
  179.  
  180.  
  181. /*****************************************************************************
  182.   FUNCTION : bn_artmap_createNet
  183.  
  184.   PURPOSE  : Generation of the ARTMAP network using SNNS kernel functions.
  185.   NOTES    :
  186.  
  187.   UPDATE   : 20.1.1993
  188. ******************************************************************************/
  189.  
  190. static krui_err bn_artmap_createNet (int f1aUnits, int f1aRows, int f2aUnits, int f2aRows, 
  191.                                      int f1bUnits, int f1bRows, int f2bUnits, int f2bRows)
  192.  
  193. {
  194.    krui_err          ret_code   = KRERR_NO_ERROR;
  195.  
  196.    int               NoOfSites;
  197.  
  198.    char              **SiteName, **SiteFunc;
  199.  
  200.    int               i, j;
  201.  
  202.    /* Allocate memory for the to pointer Arrays for site names
  203.       and sitefunc names
  204.    */
  205.    SiteName      = (char **) malloc (2*sizeof(char *));
  206.    SiteFunc      = (char **) malloc (2*sizeof(char *));
  207.  
  208.    if ((SiteName == NULL) || (SiteFunc == NULL)) {
  209.       return (KRERR_INSUFFICIENT_MEM);
  210.    } /*if*/
  211.    /* Allocate memory to save Site names and Sitefunc names */
  212.    *SiteName     = malloc (STRING_LENGTH);
  213.    *(SiteName+1) = malloc (STRING_LENGTH);
  214.    *SiteFunc     = malloc (STRING_LENGTH);
  215.    *(SiteFunc+1) = malloc (STRING_LENGTH);
  216.  
  217.    if ((*SiteName == NULL) || (*(SiteName+1) == NULL) ||
  218.        (*SiteFunc == NULL) || (*(SiteFunc+1) == NULL)
  219.       )
  220.    {
  221.       return (KRERR_INSUFFICIENT_MEM);
  222.    } /*if*/
  223.  
  224.  
  225.    /********* create ARTa units ******************/
  226.  
  227.    /* create Input Layer for ARTa */
  228.    ret_code = bn_artmap_make_layer (f1aUnits, f1aRows, F1a_COLS, INPa_X, INPa_Y, "inpa",
  229.                                     INPUT, ACTF_INPa, OUTFUNC, 0, NULL, NULL);
  230.    CHECK_RETURN (ret_code);
  231.  
  232.    /* create Comparison Layer for ARTa */
  233.    ret_code = bn_artmap_make_layer (f1aUnits, f1aRows, F1a_COLS, CMPa_X, CMPa_Y, "cmpa",
  234.                                     HIDDEN, ACTF_CMPa, OUTFUNC, 0, NULL, NULL);
  235.    CHECK_RETURN (ret_code);
  236.  
  237.    /* create Recognition Layer for ARTa */
  238.    ret_code = bn_artmap_make_layer (f2aUnits, f2aRows, F2a_COLS, RECa_X, RECa_Y, "reca",
  239.                                     SPECIAL, ACTF_RECa, OUTFUNC, 0, NULL, NULL);
  240.    CHECK_RETURN (ret_code);
  241.  
  242.    /* create Delay Layer for ARTa */
  243.    ret_code = bn_artmap_make_layer (f2aUnits, f2aRows, F2a_COLS, DELa_X, DELa_Y, "dela",
  244.                                     HIDDEN, ACTF_DELa, OUTFUNC, 0, NULL, NULL);
  245.    CHECK_RETURN (ret_code);
  246.  
  247.    /* create d1a */
  248.    ret_code = bn_artmap_make_layer (1, 1, 1, D1a_X, D1a_Y, "d1a", HIDDEN, ACTF_Da,
  249.                                     OUTFUNC, 0, NULL, NULL);
  250.    CHECK_RETURN (ret_code);
  251.  
  252.    /* create d2a */
  253.    ret_code = bn_artmap_make_layer (1, 1, 1, D2a_X, D2a_Y, "d2a", HIDDEN, ACTF_Da,
  254.                                     OUTFUNC, 0, NULL, NULL);
  255.    CHECK_RETURN (ret_code);
  256.  
  257.    /* create d3a */
  258.    ret_code = bn_artmap_make_layer (1, 1, 1, D3a_X, D3a_Y, "d3a", HIDDEN, ACTF_Da,
  259.                                     OUTFUNC, 0, NULL, NULL);
  260.    CHECK_RETURN (ret_code);
  261.  
  262.    /* create local reset layer */
  263.    NoOfSites = 2;
  264.    strcpy(*SiteName,     SITE_NAME_RSTa_SELF);
  265.    strcpy(*(SiteName+1), SITE_NAME_RSTa_SIGNAL);
  266.    strcpy(*SiteFunc,     SITE_FUNC_RSTa_SELF);
  267.    strcpy(*(SiteFunc+1), SITE_FUNC_RSTa_SIGNAL);
  268.  
  269.    ret_code = bn_artmap_make_layer (f2aUnits, f2aRows, F2a_COLS, RSTa_X, RSTa_Y, "rsta",
  270.                                     HIDDEN, ACTF_RSTa, OUTFUNC, NoOfSites, SiteName,
  271.                                     SiteFunc);
  272.    CHECK_RETURN (ret_code);
  273.  
  274.  
  275.    /* create g1a */
  276.    NoOfSites = 2;
  277.    strcpy(*SiteName    , SITE_NAME_REC_G1a);
  278.    strcpy(*(SiteName+1), SITE_NAME_INP_G1a);
  279.    strcpy(*SiteFunc    , SITE_FUNC_REC_G1a);
  280.    strcpy(*(SiteFunc+1), SITE_FUNC_INP_G1a);
  281.  
  282.    ret_code = bn_artmap_make_layer (1, 1, 1, G1a_X, G1a_Y, "g1a", HIDDEN, ACTF_G1a,
  283.                                     OUTFUNC, NoOfSites, SiteName, SiteFunc);
  284.    CHECK_RETURN (ret_code);
  285.  
  286.    /* create ria */
  287.    NoOfSites = 2;
  288.    strcpy(*SiteName    , SITE_NAME_INP_RIa);
  289.    strcpy(*(SiteName+1), SITE_NAME_RHO_RIa);
  290.    strcpy(*SiteFunc    , SITE_FUNC_INP_RIa);
  291.    strcpy(*(SiteFunc+1), SITE_FUNC_RHO_RIa);
  292.  
  293.    ret_code = bn_artmap_make_layer (1, 1, 1, RIa_X, RIa_Y, "ria", HIDDEN, ACTF_RIa,
  294.                                     OUTFUNC, NoOfSites, SiteName, SiteFunc);
  295.    CHECK_RETURN (ret_code);
  296.  
  297.    /* create rca */
  298.    ret_code = bn_artmap_make_layer (1, 1, 1, RCa_X, RCa_Y, "rca", HIDDEN, ACTF_RCa,
  299.                                     OUTFUNC, 0, NULL, NULL);
  300.    CHECK_RETURN (ret_code);
  301.  
  302.  
  303.    /* create rga */
  304.    ret_code = bn_artmap_make_layer (1, 1, 1, RGa_X, RGa_Y, "rga", HIDDEN, ACTF_RGa,
  305.                                     OUTFUNC, 0, NULL, NULL);
  306.    CHECK_RETURN (ret_code);
  307.  
  308.    /* create cla */
  309.    ret_code = bn_artmap_make_layer (1, 1, 1, CLa_X, CLa_Y, "cla", HIDDEN, ACTF_CLa,
  310.                                     OUTFUNC, 0, NULL, NULL);
  311.    CHECK_RETURN (ret_code);
  312.  
  313.    /* create nca */
  314.    ret_code = bn_artmap_make_layer (1, 1, 1, NCa_X, NCa_Y, "nca", HIDDEN, ACTF_NCa,
  315.                                     OUTFUNC, 0, NULL, NULL);
  316.    CHECK_RETURN (ret_code);
  317.  
  318.    /* create rhoa */
  319.    ret_code = bn_artmap_make_layer (1, 1, 1, RHOa_X, RHOa_Y, "rhoa", HIDDEN, ACTF_RHOa,
  320.                                     OUTFUNC, 0, NULL, NULL);
  321.    CHECK_RETURN (ret_code);
  322.  
  323.    /* create g2a */
  324.    ret_code = bn_artmap_make_layer (1, 1, 1, G2a_X, G2a_Y, "g2a", HIDDEN, ACTF_G2a,
  325.                                     OUTFUNC, 0, NULL, NULL);
  326.    CHECK_RETURN (ret_code);
  327.  
  328.  
  329.  
  330.    /********* create MAP-Field units ******************/
  331.  
  332.    /* create map layer */
  333.    ret_code = bn_artmap_make_layer (f2bUnits, f2bRows, F2b_COLS, MAP_X, MAP_Y, "map", HIDDEN,
  334.                                     ACTF_MAP, OUTFUNC, 0, NULL, NULL);
  335.    CHECK_RETURN (ret_code);
  336.  
  337.    /* create d1 unit */
  338.    ret_code = bn_artmap_make_layer (1, 1, 1, D1_X, D1_Y, "d1", HIDDEN, ACTF_D1, OUTFUNC,
  339.                                     0, NULL, NULL);
  340.    CHECK_RETURN (ret_code);
  341.  
  342.    /* create G unit */
  343.    NoOfSites = 2;
  344.    strcpy(*SiteName    , SITE_NAME_ARTa_G);
  345.    strcpy(*(SiteName+1), SITE_NAME_ARTb_G);
  346.    strcpy(*SiteFunc    , SITE_FUNC_ARTa_G);
  347.    strcpy(*(SiteFunc+1), SITE_FUNC_ARTb_G);
  348.  
  349.    ret_code = bn_artmap_make_layer (1, 1, 1, G_X, G_Y, "G", HIDDEN, ACTF_G, OUTFUNC,
  350.                                     NoOfSites, SiteName, SiteFunc);
  351.    CHECK_RETURN (ret_code);
  352.  
  353.    /* create rb unit */
  354.    NoOfSites = 2;
  355.    strcpy(*SiteName    , SITE_NAME_B_RB);
  356.    strcpy(*(SiteName+1), SITE_NAME_RHO_RB);
  357.    strcpy(*SiteFunc    , SITE_FUNC_B_RB);
  358.    strcpy(*(SiteFunc+1), SITE_FUNC_RHO_RB);
  359.  
  360.    ret_code = bn_artmap_make_layer (1, 1, 1, RB_X, RB_Y, "rb", HIDDEN, ACTF_RB, OUTFUNC,
  361.                                     NoOfSites, SiteName, SiteFunc);
  362.    CHECK_RETURN (ret_code);
  363.  
  364.    /* create rm unit */
  365.    ret_code = bn_artmap_make_layer (1, 1, 1, RM_X, RM_Y, "rm", HIDDEN, ACTF_RM, OUTFUNC,
  366.                                     0, NULL, NULL);
  367.    CHECK_RETURN (ret_code);
  368.  
  369.    /* create rg unit */
  370.    ret_code = bn_artmap_make_layer (1, 1, 1, RG_X, RG_Y, "rg", HIDDEN, ACTF_RG, OUTFUNC,
  371.                                     0, NULL, NULL);
  372.    CHECK_RETURN (ret_code);
  373.  
  374.    /* create cl unit */
  375.    ret_code = bn_artmap_make_layer (1, 1, 1, CL_X, CL_Y, "cl", HIDDEN, ACTF_CL, OUTFUNC,
  376.                                     0, NULL, NULL);
  377.    CHECK_RETURN (ret_code);
  378.  
  379.    /* create nc unit */
  380.    ret_code = bn_artmap_make_layer (1, 1, 1, NC_X, NC_Y, "nc", HIDDEN, ACTF_NC, OUTFUNC,
  381.                                     0, NULL, NULL);
  382.    CHECK_RETURN (ret_code);
  383.  
  384.    /* create rho unit */
  385.    ret_code = bn_artmap_make_layer (1, 1, 1, RHO_X, RHO_Y, "rho", HIDDEN, ACTF_RHO, OUTFUNC,
  386.                                     0, NULL, NULL);
  387.    CHECK_RETURN (ret_code);
  388.  
  389.    /* create qu unit */
  390.    NoOfSites = 2;
  391.    strcpy(*SiteName    , SITE_NAME_INPa_QU);
  392.    strcpy(*(SiteName+1), SITE_NAME_CMPa_QU);
  393.    strcpy(*SiteFunc    , SITE_FUNC_INPa_QU);
  394.    strcpy(*(SiteFunc+1), SITE_FUNC_CMPa_QU);
  395.  
  396.    ret_code = bn_artmap_make_layer (1, 1, 1, QU_X, QU_Y, "qu", HIDDEN, ACTF_QU, OUTFUNC,
  397.                                     NoOfSites, SiteName, SiteFunc);
  398.    CHECK_RETURN (ret_code);
  399.  
  400.    /* create drho unit */
  401.    ret_code = bn_artmap_make_layer (1, 1, 1, DRHO_X, DRHO_Y, "drho", HIDDEN, ACTF_DRHO, OUTFUNC,
  402.                                     0, NULL, NULL);
  403.    CHECK_RETURN (ret_code);
  404.  
  405.  
  406.  
  407.    /********* create ARTb units ******************/
  408.  
  409.  
  410.    /* create Input Layer for ARTb */
  411.    ret_code = bn_artmap_make_layer (f1bUnits, f1bRows, F1b_COLS, INPb_X, INPb_Y, "inpb",
  412.                                     INPUT, ACTF_INPb, OUTFUNC, 0, NULL, NULL);
  413.    CHECK_RETURN (ret_code);
  414.  
  415.    /* create Comparison Layer for ARTb */
  416.    ret_code = bn_artmap_make_layer (f1bUnits, f1bRows, F1b_COLS, CMPb_X, CMPb_Y, "cmpb",
  417.                                     HIDDEN, ACTF_CMPb, OUTFUNC, 0, NULL, NULL);
  418.    CHECK_RETURN (ret_code);
  419.  
  420.    /* create Recognition Layer for ARTb */
  421.    ret_code = bn_artmap_make_layer (f2bUnits, f2bRows, F2b_COLS, RECb_X, RECb_Y, "recb",
  422.                                     SPECIAL, ACTF_RECb, OUTFUNC, 0, NULL, NULL);
  423.    CHECK_RETURN (ret_code);
  424.  
  425.    /* create Delay Layer for ARTa */
  426.    ret_code = bn_artmap_make_layer (f2bUnits, f2bRows, F2b_COLS, DELb_X, DELb_Y, "delb",
  427.                                     HIDDEN, ACTF_DELb, OUTFUNC, 0, NULL, NULL);
  428.  
  429.    /* create d1b */
  430.    ret_code = bn_artmap_make_layer (1, 1, 1, D1b_X, D1b_Y, "d1b", HIDDEN, ACTF_Db,
  431.                                     OUTFUNC, 0, NULL, NULL);
  432.    CHECK_RETURN (ret_code);
  433.  
  434.    /* create d2b */
  435.    ret_code = bn_artmap_make_layer (1, 1, 1, D2b_X, D2b_Y, "d2b", HIDDEN, ACTF_Db,
  436.                                     OUTFUNC, 0, NULL, NULL);
  437.    CHECK_RETURN (ret_code);
  438.  
  439.    /* create d3b */
  440.    ret_code = bn_artmap_make_layer (1, 1, 1, D3b_X, D3b_Y, "d3b", HIDDEN, ACTF_Db,
  441.                                     OUTFUNC, 0, NULL, NULL);
  442.    CHECK_RETURN (ret_code);
  443.  
  444.    /* create local reset layer */
  445.    NoOfSites = 2;
  446.    strcpy(*SiteName    , SITE_NAME_RSTb_SELF);
  447.    strcpy(*(SiteName+1), SITE_NAME_RSTb_SIGNAL);
  448.    strcpy(*SiteFunc    , SITE_FUNC_RSTb_SELF);
  449.    strcpy(*(SiteFunc+1), SITE_FUNC_RSTb_SIGNAL);
  450.  
  451.    ret_code = bn_artmap_make_layer (f2bUnits, f2bRows, F2b_COLS, RSTb_X, RSTb_Y, "rstb",
  452.                                     HIDDEN, ACTF_RSTb, OUTFUNC, NoOfSites, SiteName,
  453.                                     SiteFunc);
  454.    CHECK_RETURN (ret_code);
  455.  
  456.  
  457.    /* create g1b */
  458.    NoOfSites = 2;
  459.    strcpy(*SiteName    , SITE_NAME_REC_G1b);
  460.    strcpy(*(SiteName+1), SITE_NAME_INP_G1b);
  461.    strcpy(*SiteFunc    , SITE_FUNC_REC_G1b);
  462.    strcpy(*(SiteFunc+1), SITE_FUNC_INP_G1b);
  463.  
  464.    ret_code = bn_artmap_make_layer (1, 1, 1, G1b_X, G1b_Y, "g1b", HIDDEN, ACTF_G1b,
  465.                                     OUTFUNC, NoOfSites, SiteName, SiteFunc);
  466.    CHECK_RETURN (ret_code);
  467.  
  468.    /* create rib */
  469.    NoOfSites = 2;
  470.    strcpy(*SiteName    , SITE_NAME_INP_RIb);
  471.    strcpy(*(SiteName+1), SITE_NAME_RHO_RIb);
  472.    strcpy(*SiteFunc    , SITE_FUNC_INP_RIb);
  473.    strcpy(*(SiteFunc+1), SITE_FUNC_RHO_RIb);
  474.  
  475.    ret_code = bn_artmap_make_layer (1, 1, 1, RIb_X, RIb_Y, "rib", HIDDEN, ACTF_RIb,
  476.                                     OUTFUNC, NoOfSites, SiteName, SiteFunc);
  477.    CHECK_RETURN (ret_code);
  478.  
  479.    /* create rcb */
  480.    ret_code = bn_artmap_make_layer (1, 1, 1, RCb_X, RCb_Y, "rcb", HIDDEN, ACTF_RCb,
  481.                                     OUTFUNC, 0, NULL, NULL);
  482.    CHECK_RETURN (ret_code);
  483.  
  484.  
  485.    /* create rgb */
  486.    ret_code = bn_artmap_make_layer (1, 1, 1, RGb_X, RGb_Y, "rgb", HIDDEN, ACTF_RGb,
  487.                                     OUTFUNC, 0, NULL, NULL);
  488.    CHECK_RETURN (ret_code);
  489.  
  490.    /* create clb */
  491.    ret_code = bn_artmap_make_layer (1, 1, 1, CLb_X, CLb_Y, "clb", HIDDEN, ACTF_CLb,
  492.                                     OUTFUNC, 0, NULL, NULL);
  493.    CHECK_RETURN (ret_code);
  494.  
  495.    /* create ncb */
  496.    ret_code = bn_artmap_make_layer (1, 1, 1, NCb_X, NCb_Y, "ncb", HIDDEN, ACTF_NCb,
  497.                                     OUTFUNC, 0, NULL, NULL);
  498.    CHECK_RETURN (ret_code);
  499.  
  500.    /* create rhob */
  501.    ret_code = bn_artmap_make_layer (1, 1, 1, RHOb_X, RHOb_Y, "rhob", HIDDEN, ACTF_RHOb,
  502.                                     OUTFUNC, 0, NULL, NULL);
  503.    CHECK_RETURN (ret_code);
  504.  
  505.    /* create g2b */
  506.    ret_code = bn_artmap_make_layer (1, 1, 1, G2b_X, G2b_Y, "g2b", HIDDEN, ACTF_G2b,
  507.                                     OUTFUNC, 0, NULL, NULL);
  508.    CHECK_RETURN (ret_code);
  509.  
  510.  
  511.  
  512.    /* Make Connections now */
  513.  
  514.  
  515.    /********* Create Links **************************************/
  516.  
  517.  
  518.    /********* Links to ARTa units ***********************/
  519.  
  520.    /* TO cmpa units */
  521.    for (i=1; i<=f1aUnits; i++) {
  522.  
  523.       ret_code = krui_setCurrentUnit (CMPa_UNIT(i));
  524.       CHECK_RETURN (ret_code);
  525.  
  526.       /* FROM inpa units */
  527.       ret_code = krui_createLink (INPa_UNIT(i),0.0);
  528.       CHECK_RETURN (ret_code);
  529.  
  530.       /* FROM g1a unit */
  531.       ret_code = krui_createLink (G1a_UNIT, 0.0);
  532.       CHECK_RETURN (ret_code);
  533.  
  534.       /* FROM dela units */
  535.       for (j=1; j<=f2aUnits; j++) {
  536.          ret_code = krui_createLink (DELa_UNIT(j), 0.0);
  537.          CHECK_RETURN (ret_code);
  538.       } /*for*/
  539.  
  540.    } /*for*/
  541.  
  542.  
  543.    /* TO reca units */
  544.    for (i=1; i<=f2aUnits; i++) {
  545.  
  546.       ret_code = krui_setCurrentUnit (RECa_UNIT(i));
  547.       CHECK_RETURN (ret_code);
  548.  
  549.       /* FROM cmpa units */
  550.       for (j=1; j<=f1aUnits; j++) {
  551.          ret_code = krui_createLink (CMPa_UNIT(j), 0.0);
  552.          CHECK_RETURN (ret_code);
  553.       } /*for*/
  554.  
  555.       /* FROM rga unit */
  556.       ret_code = krui_createLink (RGa_UNIT, 0.0);
  557.       CHECK_RETURN (ret_code);
  558.  
  559.       /* FROM rsta units */
  560.       ret_code = krui_createLink (RSTa_UNIT(i), 0.0);
  561.       CHECK_RETURN (ret_code);
  562.  
  563.       /* FROM g2a unit */
  564.       ret_code = krui_createLink (G2a_UNIT, 0.0);
  565.       CHECK_RETURN (ret_code);
  566.  
  567.    } /*for*/
  568.  
  569.  
  570.    /* TO dela units */
  571.    for (i=1; i<=f2aUnits; i++) {
  572.  
  573.       ret_code = krui_setCurrentUnit (DELa_UNIT(i));
  574.       CHECK_RETURN (ret_code);
  575.  
  576.       /* FROM reca units */
  577.       ret_code = krui_createLink (RECa_UNIT(i), 0.0);
  578.       CHECK_RETURN (ret_code);
  579.  
  580.    } /*for*/
  581.  
  582.  
  583.    /* TO rsta units */
  584.    for (i=1; i<=f2aUnits; i++) {
  585.  
  586.       ret_code = krui_setCurrentUnit (RSTa_UNIT(i));
  587.       CHECK_RETURN (ret_code);
  588.  
  589.       /* first Site */
  590.       ret_code = krui_setSite (SITE_NAME_RSTa_SELF);
  591.       CHECK_RETURN (ret_code);
  592.  
  593.       /* FROM itself */
  594.       ret_code = krui_createLink (RSTa_UNIT(i), 0.0);
  595.       CHECK_RETURN (ret_code);
  596.  
  597.       /* second Site */
  598.       ret_code = krui_setSite (SITE_NAME_RSTa_SIGNAL);
  599.       CHECK_RETURN (ret_code);
  600.  
  601.       /* FROM dela units */
  602.       ret_code = krui_createLink (DELa_UNIT(i), 0.0);
  603.       CHECK_RETURN (ret_code);
  604.  
  605.       /* FROM rga unit */
  606.       ret_code = krui_createLink (RGa_UNIT, 0.0);
  607.       CHECK_RETURN (ret_code);
  608.  
  609.  
  610.    } /*for*/
  611.  
  612.  
  613.    /* TO d1a unit */
  614.    ret_code = krui_setCurrentUnit (Da_UNIT(1));
  615.    CHECK_RETURN (ret_code);
  616.  
  617.    /* FROM dela units */
  618.    for (j=1; j<=f2aUnits; j++) {
  619.       ret_code = krui_createLink (DELa_UNIT(j), 0.0);
  620.       CHECK_RETURN (ret_code);
  621.    } /*for*/
  622.  
  623.  
  624.    /* TO d2a unit */
  625.    ret_code = krui_setCurrentUnit (Da_UNIT(2));
  626.    CHECK_RETURN (ret_code);
  627.  
  628.    /* FROM d1a unit */
  629.    ret_code = krui_createLink (Da_UNIT(1), 0.0);
  630.    CHECK_RETURN (ret_code);
  631.  
  632.  
  633.    /* TO d3a unit */
  634.    ret_code = krui_setCurrentUnit (Da_UNIT(3));
  635.    CHECK_RETURN (ret_code);
  636.  
  637.    /* FROM d2a unit */
  638.    ret_code = krui_createLink (Da_UNIT(2), 0.0);
  639.    CHECK_RETURN (ret_code);
  640.  
  641.  
  642.    /* TO g1a unit */
  643.    ret_code = krui_setCurrentUnit (G1a_UNIT);
  644.    CHECK_RETURN (ret_code);
  645.  
  646.    /* first Site */
  647.    ret_code = krui_setSite (SITE_NAME_REC_G1a);
  648.    CHECK_RETURN (ret_code);
  649.  
  650.    /* FROM reca units */
  651.    for (j=1; j<=f2aUnits; j++) {
  652.       ret_code = krui_createLink (RECa_UNIT(j), 0.0);
  653.       CHECK_RETURN (ret_code);
  654.    } /*for*/
  655.  
  656.    /* second Site */
  657.    ret_code = krui_setSite (SITE_NAME_INP_G1a);
  658.    CHECK_RETURN (ret_code);
  659.  
  660.    /* FROM inpa units */
  661.    for (j=1; j<=f1aUnits; j++) {
  662.       ret_code = krui_createLink (INPa_UNIT(j), 0.0);
  663.       CHECK_RETURN (ret_code);
  664.    } /*for*/
  665.  
  666.  
  667.    /* TO ria unit */
  668.    ret_code = krui_setCurrentUnit (RIa_UNIT);
  669.    CHECK_RETURN (ret_code);
  670.  
  671.    /* first Site */
  672.    ret_code = krui_setSite (SITE_NAME_INP_RIa);
  673.    CHECK_RETURN (ret_code);
  674.  
  675.    /* FROM inpa units */
  676.    for (j=1; j<=f1aUnits; j++) {
  677.       ret_code = krui_createLink (INPa_UNIT(j), 0.0);
  678.       CHECK_RETURN (ret_code);
  679.    } /*for*/
  680.  
  681.    /* second Site */
  682.    ret_code = krui_setSite (SITE_NAME_RHO_RIa);
  683.    CHECK_RETURN (ret_code);
  684.  
  685.    /* from rhoa unit */
  686.    ret_code = krui_createLink (RHOa_UNIT, 0.0);
  687.    CHECK_RETURN (ret_code);
  688.  
  689.  
  690.    /* TO rca unit */
  691.    ret_code = krui_setCurrentUnit (RCa_UNIT);
  692.    CHECK_RETURN (ret_code);
  693.  
  694.    /* FROM cmpa units */
  695.    for (j=1; j<=f1aUnits; j++) {
  696.       ret_code = krui_createLink (CMPa_UNIT(j), 0.0);
  697.       CHECK_RETURN (ret_code);
  698.    } /*for*/
  699.  
  700.  
  701.    /* TO rga unit */
  702.    ret_code = krui_setCurrentUnit (RGa_UNIT);
  703.    CHECK_RETURN (ret_code);
  704.  
  705.    /* FROM ria unit */
  706.    ret_code = krui_createLink (RIa_UNIT, 0.0);
  707.    CHECK_RETURN (ret_code);
  708.  
  709.    /* FROM rca unit */
  710.    ret_code = krui_createLink (RCa_UNIT, 0.0);
  711.    CHECK_RETURN (ret_code);
  712.  
  713.  
  714.    /* TO cla unit */
  715.    ret_code = krui_setCurrentUnit (CLa_UNIT);
  716.    CHECK_RETURN (ret_code);
  717.  
  718.    /* FROM d3a unit */
  719.    ret_code = krui_createLink (Da_UNIT(3), 0.0);
  720.    CHECK_RETURN (ret_code);
  721.  
  722.    /* FROM rga unit */
  723.    ret_code = krui_createLink (RGa_UNIT, 0.0);
  724.    CHECK_RETURN (ret_code);
  725.  
  726.    /* FROM g2a unit */
  727.    ret_code = krui_createLink (G2a_UNIT, 0.0);
  728.    CHECK_RETURN (ret_code);
  729.  
  730.  
  731.    /* TO nca unit */
  732.    ret_code = krui_setCurrentUnit (NCa_UNIT);
  733.    CHECK_RETURN (ret_code);
  734.  
  735.    /* FROM rsta units */
  736.    for (j=1; j<=f2aUnits; j++) {
  737.       ret_code = krui_createLink (RSTa_UNIT(j), 0.0);
  738.       CHECK_RETURN (ret_code);
  739.    } /*for*/
  740.  
  741.    /* TO rhoa unit */
  742.    ret_code = krui_setCurrentUnit (RHOa_UNIT);
  743.    CHECK_RETURN (ret_code);
  744.  
  745.    /* FROM itself */
  746.    ret_code = krui_createLink (RHOa_UNIT, 0.0);
  747.    CHECK_RETURN (ret_code);
  748.  
  749.    /* FROM drho unit */
  750.    ret_code = krui_createLink (DRHO_UNIT, 0.0);
  751.    CHECK_RETURN (ret_code);
  752.  
  753.  
  754.    /* TO g2a unit */
  755.    ret_code = krui_setCurrentUnit (G2a_UNIT);
  756.    CHECK_RETURN (ret_code);
  757.  
  758.    /* FROM inpa units */
  759.    for (j = 1; j <= f1aUnits; j++) {
  760.       ret_code = krui_createLink (INPa_UNIT(j), 0.0);
  761.       CHECK_RETURN (ret_code);
  762.    } /*for*/
  763.  
  764.  
  765.    /********* Links to MAP Fiels units ***********************/
  766.  
  767.    /* TO map units */
  768.    for (i=1; i<=f2bUnits; i++) {
  769.  
  770.       ret_code = krui_setCurrentUnit (MAP_UNIT(i));
  771.       CHECK_RETURN (ret_code);
  772.  
  773.       /* FROM dela units */
  774.       for (j=1; j<=f2aUnits; j++) {
  775.          ret_code = krui_createLink (DELa_UNIT(j), 0.0);
  776.          CHECK_RETURN (ret_code);
  777.       } /*for*/
  778.  
  779.       /* FROM delb unit */
  780.       ret_code = krui_createLink (DELb_UNIT(i), 0.0);
  781.       CHECK_RETURN (ret_code);
  782.  
  783.       /* FROM G unit */
  784.       ret_code = krui_createLink (G_UNIT, 0.0);
  785.       CHECK_RETURN (ret_code);
  786.  
  787.    } /*for*/
  788.  
  789.  
  790.    /* TO d1 unit */
  791.    ret_code = krui_setCurrentUnit (D1_UNIT);
  792.    CHECK_RETURN (ret_code);
  793.  
  794.    /* FROM delb units */
  795.    for (j=1; j<=f2bUnits; j++) {
  796.       ret_code = krui_createLink (DELb_UNIT(j), 0.0);
  797.       CHECK_RETURN (ret_code);
  798.    } /*for*/
  799.  
  800.  
  801.    /* TO G unit */
  802.    ret_code = krui_setCurrentUnit (G_UNIT);
  803.    CHECK_RETURN (ret_code);
  804.  
  805.    /* first Site */
  806.    ret_code = krui_setSite (SITE_NAME_ARTa_G);
  807.    CHECK_RETURN (ret_code);
  808.  
  809.    /* FROM reca units */
  810.    for (j=1; j<=f2aUnits; j++) {
  811.       ret_code = krui_createLink (RECa_UNIT(j), 0.0);
  812.       CHECK_RETURN (ret_code);
  813.    } /*for*/
  814.  
  815.    /* second Site */
  816.    ret_code = krui_setSite (SITE_NAME_ARTb_G);
  817.    CHECK_RETURN (ret_code);
  818.  
  819.    /* FROM recb units */
  820.    for (j=1; j<=f2bUnits; j++) {
  821.       ret_code = krui_createLink (RECb_UNIT(j), 0.0);
  822.       CHECK_RETURN (ret_code);
  823.    } /*for*/
  824.  
  825.  
  826.    /* TO rb unit */
  827.    ret_code = krui_setCurrentUnit (RB_UNIT);
  828.    CHECK_RETURN (ret_code);
  829.  
  830.    /* first Site */
  831.    ret_code = krui_setSite (SITE_NAME_B_RB);
  832.    CHECK_RETURN (ret_code);
  833.  
  834.    /* FROM d1 unit */
  835.    ret_code = krui_createLink (D1_UNIT, 0.0);
  836.    CHECK_RETURN (ret_code);
  837.  
  838.    /* second Site */
  839.    ret_code = krui_setSite (SITE_NAME_RHO_RB);
  840.    CHECK_RETURN (ret_code);
  841.  
  842.    /* from rho unit */
  843.    ret_code = krui_createLink (RHO_UNIT, 0.0);
  844.    CHECK_RETURN (ret_code);
  845.  
  846.  
  847.    /* TO rm unit */
  848.    ret_code = krui_setCurrentUnit (RM_UNIT);
  849.    CHECK_RETURN (ret_code);
  850.  
  851.    /* FROM map units */
  852.    for (j=1; j<=f2bUnits; j++) {
  853.       ret_code = krui_createLink (MAP_UNIT(j), 0.0);
  854.       CHECK_RETURN (ret_code);
  855.    } /*for*/
  856.  
  857.  
  858.    /* TO rg unit */
  859.    ret_code = krui_setCurrentUnit (RG_UNIT);
  860.    CHECK_RETURN (ret_code);
  861.  
  862.    /* FROM rb unit */
  863.    ret_code = krui_createLink (RB_UNIT, 0.0);
  864.    CHECK_RETURN (ret_code);
  865.  
  866.    /* FROM rm unit */
  867.    ret_code = krui_createLink (RM_UNIT, 0.0);
  868.    CHECK_RETURN (ret_code);
  869.  
  870.  
  871.    /* TO cl unit */
  872.    ret_code = krui_setCurrentUnit (CL_UNIT);
  873.    CHECK_RETURN (ret_code);
  874.  
  875.    /* FROM cla unit */
  876.    ret_code = krui_createLink (CLa_UNIT, 0.0);
  877.    CHECK_RETURN (ret_code);
  878.  
  879.    /* FROM clb unit */
  880.    ret_code = krui_createLink (CLb_UNIT, 0.0);
  881.    CHECK_RETURN (ret_code);
  882.  
  883.    /* FROM rg unit */
  884.    ret_code = krui_createLink (RG_UNIT, 0.0);
  885.    CHECK_RETURN (ret_code);
  886.  
  887.  
  888.    /* TO nc unit */
  889.    ret_code = krui_setCurrentUnit (NC_UNIT);
  890.    CHECK_RETURN (ret_code);
  891.  
  892.    /* FROM nca unit */
  893.    ret_code = krui_createLink (NCa_UNIT, 0.0);
  894.    CHECK_RETURN (ret_code);
  895.  
  896.    /* FROM ncb unit */
  897.    ret_code = krui_createLink (NCb_UNIT, 0.0);
  898.    CHECK_RETURN (ret_code);
  899.  
  900.    /* TO rho unit */
  901.    ret_code = krui_setCurrentUnit (RHO_UNIT);
  902.    CHECK_RETURN (ret_code);
  903.  
  904.    /* from itself */
  905.    ret_code = krui_createLink (RHO_UNIT, 0.0);
  906.    CHECK_RETURN (ret_code);
  907.  
  908.  
  909.    /* TO qu unit */
  910.    ret_code = krui_setCurrentUnit (QU_UNIT);
  911.    CHECK_RETURN (ret_code);
  912.  
  913.    /* first Site */
  914.    ret_code = krui_setSite (SITE_NAME_INPa_QU);
  915.    CHECK_RETURN (ret_code);
  916.  
  917.    /* FROM inpa units */
  918.    for (j=1; j <= f1aUnits; j++) {
  919.       ret_code = krui_createLink (INPa_UNIT(j), 0.0);
  920.       CHECK_RETURN (ret_code);
  921.    } /*for*/
  922.  
  923.    /* second Site */
  924.    ret_code = krui_setSite (SITE_NAME_CMPa_QU);
  925.    CHECK_RETURN (ret_code);
  926.  
  927.    /* from cmpa units */
  928.    for (j=1; j<=f1aUnits; j++) {
  929.       ret_code = krui_createLink (CMPa_UNIT(j), 0.0);
  930.       CHECK_RETURN (ret_code);
  931.    } /*for*/
  932.  
  933.  
  934.    /* TO drho unit */
  935.    ret_code = krui_setCurrentUnit (DRHO_UNIT);
  936.    CHECK_RETURN (ret_code);
  937.  
  938.    /* from itself */
  939.    ret_code = krui_createLink (DRHO_UNIT, 0.0);
  940.    CHECK_RETURN (ret_code);
  941.  
  942.    /* from rg unit */
  943.    ret_code = krui_createLink (RG_UNIT, 0.0);
  944.    CHECK_RETURN (ret_code);
  945.  
  946.    /* from qu unit */
  947.    ret_code = krui_createLink (QU_UNIT, 0.0);
  948.    CHECK_RETURN (ret_code);
  949.  
  950.    /* from rhoa unit */
  951.    ret_code = krui_createLink (RHOa_UNIT, 0.0);
  952.    CHECK_RETURN (ret_code);
  953.  
  954.    /* from rga unit */
  955.    ret_code = krui_createLink (RGa_UNIT, 0.0);
  956.    CHECK_RETURN (ret_code);
  957.  
  958.    /* from clb unit */
  959.    ret_code = krui_createLink (CLb_UNIT, 0.0);
  960.    CHECK_RETURN (ret_code);
  961.  
  962.  
  963.    /********* Links to ARTb units ***********************/
  964.  
  965.    /* TO cmpb units */
  966.    for (i=1; i<=f1bUnits; i++) {
  967.  
  968.       ret_code = krui_setCurrentUnit (CMPb_UNIT(i));
  969.       CHECK_RETURN (ret_code);
  970.  
  971.       /* FROM inpb units */
  972.       ret_code = krui_createLink (INPb_UNIT(i),0.0);
  973.       CHECK_RETURN (ret_code);
  974.  
  975.       /* FROM g1b unit */
  976.       ret_code = krui_createLink (G1b_UNIT, 0.0);
  977.       CHECK_RETURN (ret_code);
  978.  
  979.       /* FROM delb units */
  980.       for (j=1; j<=f2bUnits; j++) {
  981.          ret_code = krui_createLink (DELb_UNIT(j), 0.0);
  982.          CHECK_RETURN (ret_code);
  983.       } /*for*/
  984.  
  985.    } /*for*/
  986.  
  987.  
  988.    /* TO recb units */
  989.    for (i=1; i<=f2bUnits; i++) {
  990.  
  991.       ret_code = krui_setCurrentUnit (RECb_UNIT(i));
  992.       CHECK_RETURN (ret_code);
  993.  
  994.       /* FROM cmpb units */
  995.       for (j=1; j<=f1bUnits; j++) {
  996.          ret_code = krui_createLink (CMPb_UNIT(j), 0.0);
  997.          CHECK_RETURN (ret_code);
  998.       } /*for*/
  999.  
  1000.       /* FROM rgb unit */
  1001.       ret_code = krui_createLink (RGb_UNIT, 0.0);
  1002.       CHECK_RETURN (ret_code);
  1003.  
  1004.       /* FROM rstb units */
  1005.       ret_code = krui_createLink (RSTb_UNIT(i), 0.0);
  1006.       CHECK_RETURN (ret_code);
  1007.  
  1008.       /* FROM g2b unit */
  1009.       ret_code = krui_createLink (G2b_UNIT, 0.0);
  1010.       CHECK_RETURN (ret_code);
  1011.  
  1012.    } /*for*/
  1013.  
  1014.  
  1015.    /* TO delb units */
  1016.    for (i=1; i<=f2bUnits; i++) {
  1017.  
  1018.       ret_code = krui_setCurrentUnit (DELb_UNIT(i));
  1019.       CHECK_RETURN (ret_code);
  1020.  
  1021.       /* FROM recb units */
  1022.       ret_code = krui_createLink (RECb_UNIT(i), 0.0);
  1023.       CHECK_RETURN (ret_code);
  1024.  
  1025.       /* FROM map units */
  1026.       ret_code = krui_createLink (MAP_UNIT(i), 0.0);
  1027.       CHECK_RETURN (ret_code);
  1028.  
  1029.    } /*for*/
  1030.  
  1031.  
  1032.    /* TO rstb units */
  1033.    for (i=1; i<=f2bUnits; i++) {
  1034.  
  1035.       ret_code = krui_setCurrentUnit (RSTb_UNIT(i));
  1036.       CHECK_RETURN (ret_code);
  1037.  
  1038.       /* first Site */
  1039.       ret_code = krui_setSite (SITE_NAME_RSTb_SELF);
  1040.       CHECK_RETURN (ret_code);
  1041.  
  1042.       /* FROM itself */
  1043.       ret_code = krui_createLink (RSTb_UNIT(i), 0.0);
  1044.       CHECK_RETURN (ret_code);
  1045.  
  1046.       /* second Site */
  1047.       ret_code = krui_setSite (SITE_NAME_RSTb_SIGNAL);
  1048.       CHECK_RETURN (ret_code);
  1049.  
  1050.       /* FROM delb units */
  1051.       ret_code = krui_createLink (DELb_UNIT(i), 0.0);
  1052.       CHECK_RETURN (ret_code);
  1053.  
  1054.       /* FROM rgb unit */
  1055.       ret_code = krui_createLink (RGb_UNIT, 0.0);
  1056.       CHECK_RETURN (ret_code);
  1057.  
  1058.    } /*for*/
  1059.  
  1060.  
  1061.    /* TO d1b unit */
  1062.    ret_code = krui_setCurrentUnit (Db_UNIT(1));
  1063.    CHECK_RETURN (ret_code);
  1064.  
  1065.    /* FROM delb units */
  1066.    for (j=1; j<=f2bUnits; j++) {
  1067.       ret_code = krui_createLink (DELb_UNIT(j), 0.0);
  1068.       CHECK_RETURN (ret_code);
  1069.    } /*for*/
  1070.  
  1071.  
  1072.    /* TO d2b unit */
  1073.    ret_code = krui_setCurrentUnit (Db_UNIT(2));
  1074.    CHECK_RETURN (ret_code);
  1075.  
  1076.    /* FROM d1b unit */
  1077.    ret_code = krui_createLink (Db_UNIT(1), 0.0);
  1078.    CHECK_RETURN (ret_code);
  1079.  
  1080.  
  1081.    /* TO d3b unit */
  1082.    ret_code = krui_setCurrentUnit (Db_UNIT(3));
  1083.    CHECK_RETURN (ret_code);
  1084.  
  1085.    /* FROM d2b unit */
  1086.    ret_code = krui_createLink (Db_UNIT(2), 0.0);
  1087.    CHECK_RETURN (ret_code);
  1088.  
  1089.  
  1090.    /* TO g1b unit */
  1091.    ret_code = krui_setCurrentUnit (G1b_UNIT);
  1092.    CHECK_RETURN (ret_code);
  1093.  
  1094.    /* first Site */
  1095.    ret_code = krui_setSite (SITE_NAME_REC_G1b);
  1096.    CHECK_RETURN (ret_code);
  1097.  
  1098.    /* FROM recb units */
  1099.    for (j=1; j<=f2bUnits; j++) {
  1100.       ret_code = krui_createLink (RECb_UNIT(j), 0.0);
  1101.       CHECK_RETURN (ret_code);
  1102.    } /*for*/
  1103.  
  1104.    /* second Site */
  1105.    ret_code = krui_setSite (SITE_NAME_INP_G1b);
  1106.    CHECK_RETURN (ret_code);
  1107.  
  1108.    /* FROM inpb units */
  1109.    for (j=1; j<=f1bUnits; j++) {
  1110.       ret_code = krui_createLink (INPb_UNIT(j), 0.0);
  1111.       CHECK_RETURN (ret_code);
  1112.    } /*for*/
  1113.  
  1114.  
  1115.    /* TO rib unit */
  1116.    ret_code = krui_setCurrentUnit (RIb_UNIT);
  1117.    CHECK_RETURN (ret_code);
  1118.  
  1119.    /* first Site */
  1120.    ret_code = krui_setSite (SITE_NAME_INP_RIb);
  1121.    CHECK_RETURN (ret_code);
  1122.  
  1123.    /* FROM inpb units */
  1124.    for (j=1; j<=f1bUnits; j++) {
  1125.       ret_code = krui_createLink (INPb_UNIT(j), 0.0);
  1126.       CHECK_RETURN (ret_code);
  1127.    } /*for*/
  1128.  
  1129.    /* second Site */
  1130.    ret_code = krui_setSite (SITE_NAME_RHO_RIb);
  1131.    CHECK_RETURN (ret_code);
  1132.  
  1133.    /* from rhob unit */
  1134.    ret_code = krui_createLink (RHOb_UNIT, 0.0);
  1135.    CHECK_RETURN (ret_code);
  1136.  
  1137.  
  1138.    /* TO rcb unit */
  1139.    ret_code = krui_setCurrentUnit (RCb_UNIT);
  1140.    CHECK_RETURN (ret_code);
  1141.  
  1142.    /* FROM cmpb units */
  1143.    for (j=1; j<=f1bUnits; j++) {
  1144.       ret_code = krui_createLink (CMPb_UNIT(j), 0.0);
  1145.       CHECK_RETURN (ret_code);
  1146.    } /*for*/
  1147.  
  1148.  
  1149.    /* TO rgb unit */
  1150.    ret_code = krui_setCurrentUnit (RGb_UNIT);
  1151.    CHECK_RETURN (ret_code);
  1152.  
  1153.    /* FROM rib unit */
  1154.    ret_code = krui_createLink (RIb_UNIT, 0.0);
  1155.    CHECK_RETURN (ret_code);
  1156.  
  1157.    /* FROM rcb unit */
  1158.    ret_code = krui_createLink (RCb_UNIT, 0.0);
  1159.    CHECK_RETURN (ret_code);
  1160.  
  1161.  
  1162.    /* TO clb unit */
  1163.    ret_code = krui_setCurrentUnit (CLb_UNIT);
  1164.    CHECK_RETURN (ret_code);
  1165.  
  1166.    /* FROM d3b unit */
  1167.    ret_code = krui_createLink (Db_UNIT(3), 0.0);
  1168.    CHECK_RETURN (ret_code);
  1169.  
  1170.    /* FROM rgb unit */
  1171.    ret_code = krui_createLink (RGb_UNIT, 0.0);
  1172.    CHECK_RETURN (ret_code);
  1173.  
  1174.    /* FROM g2b unit */
  1175.    ret_code = krui_createLink (G2b_UNIT, 0.0);
  1176.    CHECK_RETURN (ret_code);
  1177.  
  1178.  
  1179.    /* TO ncb unit */
  1180.    ret_code = krui_setCurrentUnit (NCb_UNIT);
  1181.    CHECK_RETURN (ret_code);
  1182.  
  1183.    /* FROM rstb units */
  1184.    for (j=1; j<=f2bUnits; j++) {
  1185.       ret_code = krui_createLink (RSTb_UNIT(j), 0.0);
  1186.       CHECK_RETURN (ret_code);
  1187.    } /*for*/
  1188.  
  1189.  
  1190.    /* TO rhob unit */
  1191.    ret_code = krui_setCurrentUnit (RHOb_UNIT);
  1192.    CHECK_RETURN (ret_code);
  1193.  
  1194.    /* from itself */
  1195.    ret_code = krui_createLink (RHOb_UNIT, 0.0);
  1196.    CHECK_RETURN (ret_code);
  1197.  
  1198.  
  1199.    /* TO g2b unit */
  1200.    ret_code = krui_setCurrentUnit (G2b_UNIT);
  1201.    CHECK_RETURN (ret_code);
  1202.  
  1203.    /* FROM inpb units */
  1204.    for (j = 1; j <= f1bUnits; j++) {
  1205.       ret_code = krui_createLink (INPb_UNIT(j), 0.0);
  1206.       CHECK_RETURN (ret_code);
  1207.    } /*for*/
  1208.  
  1209.  
  1210.   /*  set the update function  */
  1211.   ret_code = krui_setUpdateFunc (UPDATE_FUNC_NAME);
  1212.   CHECK_RETURN( ret_code );
  1213.  
  1214.   /* set the learning function */
  1215.   ret_code = krui_setLearnFunc (LEARN_FUNC_NAME);
  1216.  
  1217.    return (ret_code);
  1218. }
  1219.  
  1220.  
  1221.  
  1222.  
  1223. /*****************************************************************************
  1224.   FUNCTION : bn_artmap_donePROC
  1225.  
  1226.   PURPOSE  : Callback function for DONE button in artmap
  1227.   NOTES    :
  1228.  
  1229.   UPDATE   : 20.1.1993
  1230. ******************************************************************************/
  1231.  
  1232. static void bn_artmap_donePROC (void)
  1233.  
  1234. {
  1235.  
  1236.    XtDestroyWidget (baseWidget);
  1237.    bn_artmap_open = 0;
  1238.  
  1239. }
  1240.  
  1241.  
  1242.  
  1243. /*****************************************************************************
  1244.   FUNCTION : bn_art1_createPROC
  1245.  
  1246.   PURPOSE  : Callback function for CREATE NET button in art1
  1247.   NOTES    :
  1248.  
  1249.   UPDATE   : 20.1.1993
  1250. ******************************************************************************/
  1251.  
  1252. static void bn_artmap_createPROC (void)
  1253.  
  1254. {
  1255.   int units[4], rows[4];
  1256.   int NoOfLayers = 4;
  1257.  
  1258.   if (bn_basics_check_existingNetwork()) {
  1259.  
  1260.      bn_basics_getValues (NoOfLayers, units, rows, artmapUnitWidget, artmapRowWidget);
  1261.  
  1262.      if (bn_basics_checkValues(NoOfLayers, units, rows)) {
  1263.         bn_artmap_createNet (units[0], rows[0], units[1], rows[1],
  1264.                              units[2], rows[2], units[3], rows[3]);
  1265.  
  1266.         bn_basics_refresh ();
  1267.         ui_confirmOk ("Network created!");
  1268.      } /*if*/
  1269.  
  1270.   } /*if*/
  1271.  
  1272.   return;
  1273.  
  1274. }
  1275.  
  1276.  
  1277.  
  1278. /*****************************************************************************
  1279.   FUNCTION : bn_createARTMAP
  1280.  
  1281.   PURPOSE  : create ARTMAP panel
  1282.   NOTES    :
  1283.  
  1284.   UPDATE   : 20.1.1993
  1285. ******************************************************************************/
  1286.  
  1287. void bn_createARTMAP(void)
  1288.  
  1289. {
  1290.   bn_basics_createART (ARTMAP_MODEL, &baseWidget, &bn_artmap_open,
  1291.                        artmapUnitWidget, artmapRowWidget,
  1292.                        (XtCallbackProc) bn_artmap_createPROC,
  1293.                        (XtCallbackProc) bn_artmap_donePROC);
  1294.  
  1295.  
  1296. }
  1297.  
  1298.